package myjava.j_innerClass.c_AnonymousInnerClass;

/**
 * @Auther: cty
 * @Date: 2020/6/25 23:14
 * @Description: 匿名内部类
 * 匿名内部类通过实现接口来创建
 * 匿名内部类没有访问修饰符，没有构造方法（类名都没有，何来构造方法）
 * 适用于类只使用一次的场景
 * @version: 1.0
 */

/**
 * 外部类以外的类
 */
class Test {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.inner.greet();
        outer.inner.greetSomeone("cty");
    }
}  // end Test{}


/**
 * 匿名内部类接口
 */
interface HelloWorld {
    void greet();
    void greetSomeone(String name);
}  // end HelloWorld{}

/**
 * 外部类
 */
class Outer {

    /**
     * 匿名内部类
     *      通过实现接口来创建
     */
    HelloWorld inner = new HelloWorld() {
        String name = "world";

        @Override
        public void greet() {
            greetSomeone(name);
        }

        @Override
        public void greetSomeone(String name) {
            this.name = name;
            System.out.println("Hello " + name);
        }
    };  // 不要忘记分号！

}  // end Outer{}

/**
 * Hello world
 * Hello cty
 */
